module.exports = {
  /**
   * 时间格式化
   * @param {*} fmt YYYY-mm-dd HH:MM:SS
   * @param {*} date 
   */
  dateFormat(fmt, date) {
    let ret;
    let opt = {
        "Y+": date.getFullYear().toString(),        // 年
        "m+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "H+": date.getHours().toString(),                      // 时
        "M+": date.getMinutes().toString(),         // 分
        "S+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
  },
  /**
   * 获取当前日期
   * @return YYYY-mm-dd
   */
  getCurrentDate(){
    return this.dateFormat("YYYY-mm-dd",this.getNow());
  },
  /**
   * 获取当前日期只后几天的时间
   * @Param 天 （可以是负数，代表前几天）
   * @return YYYY-mm-dd
   */
  getCurrentDateAfterDay(day){
    let timestamp = this.getNowTimestamp();
    const dateTime = new Date(timestamp+day*24*3600*1000);
    return this.dateFormat("YYYY-mm-dd",dateTime);
  },
  /**
   * 获取今天某一个时间点的日期时间
   * @Param time 时间 HH:MM:SS
   * @return YYYY-mm-dd HH:MM:SS
   */
  getTodayDateTime(time){
    return this.getCurrentDate()+" "+time;
  },
  /**
   * 获取当前日期时间
   * @return YYYY-mm-dd HH:MM:SS
   */
  getCurrentDateTime(){
    return this.dateFormat("YYYY-mm-dd HH:MM:SS",this.getNow());
  },
  /**
   * 获取当前日期时间（+-时间差）
   * @param second 时间差
   * @return YYYY-mm-dd HH:MM:SS
   */
  getCurrentDateTimeFromSecond(second){
    let timestamp = this.getNowTimestamp();
    return this.dateFormat("YYYY-mm-dd HH:MM:SS",new Date(timestamp+second*1000));
  },
  /**
   * 获取消除时差后的当前时间，返回Date
   */
  getNow(){
    let timestamp = this.getNowTimestamp();
    return new Date(timestamp);
  },
  getNowTimestamp(){
    let timestamp = Date.parse(new Date());
    timestamp=timestamp+8*3600*1000;
    return timestamp;
  },
  /**
   * 时间字符串转时间戳
   * @param {*} dateStr 时间字符串（例如 2015-03-05 17:59:00.0） 
   */
  getTimestamp(dateStr){
    dateStr = dateStr.substring(0,19);    
    dateStr = dateStr.replace(/-/g,'/'); //必须把日期'-'转为'/'
    var timestamp = new Date(dateStr).getTime();
    return timestamp-8*3600*1000;
  },
  /**
   * 获取同一天的时间添加(今天),用户数据库查询
   */
  getTodayCondiction(){
    return {$gte:this.getTodayDateTime("00:00:00"),$lte: this.getTodayDateTime("23:59:59")};
  },
  /**
   * 时间1和时间2比较，返回数字1:大于，0:等于 -1:大于，
   * 例如 返回-1 ，表示 时间1小于时间2
   * @param {string} dateTime1 YYYY-mm-dd HH:MM:SS
   * @param {string} dateTime2 YYYY-mm-dd HH:MM:SS
   */
  compare(dateTime1,dateTime2){
    const timestamp1 = new Date(dateTime1).getTime();
    const timestamp2 = new Date(dateTime2).getTime();
    if(timestamp1==timestamp2){
      return 0;
    }
    if(timestamp1>timestamp2){
      return 1;
    }
    if(timestamp1<timestamp2){
      return -1;
    }
  },
  /**
   * 获取时间段的日期集合
   * @param {string} startDate YYYY-mm-dd
   * @param {string} endDate YYYY-mm-dd
   * @return {arr{YYYY-mm-dd}}
   */
  getDateList(startDate,endDate){
    let startDateD = new Date(startDate);
    let endDateD = new Date(endDate);
    let list = [];

    while(startDateD.getTime()<=endDateD.getTime()){
      list.push(this.dateFormat('YYYY-mm-dd',startDateD));
      startDateD = new Date(startDateD.getTime()+24*3600*1000);
    }

    return list;
  },
}